package com.example.backed.service;

import com.example.backed.dto.GroupBuyCreateDTO;
import com.example.backed.dto.GroupBuyOrderCreateDTO;
import com.example.backed.dto.GroupBuyQueryDTO;
import com.example.backed.entity.GroupBuy;
import com.example.backed.entity.GroupBuyOrder;
import com.example.backed.vo.PageVO;
import java.util.List;

public interface GroupBuyService {
    /**
     * 创建团购活动
     */
    GroupBuy createGroupBuy(GroupBuyCreateDTO createDTO);

    /**
     * 取消团购活动
     */
    boolean cancelGroupBuy(Long id);

    /**
     * 获取团购活动详情
     */
    GroupBuy getGroupBuyDetail(Long id);

    /**
     * 分页查询团购活动
     */
    PageVO<GroupBuy> getGroupBuyList(GroupBuyQueryDTO queryDTO);

    /**
     * 创建团购订单
     */
    GroupBuyOrder createOrder(Long userId, GroupBuyOrderCreateDTO createDTO);

    /**
     * 取消团购订单
     */
    boolean cancelOrder(Long userId, Long orderId);

    /**
     * 获取团购订单详情
     */
    GroupBuyOrder getOrderDetail(Long userId, Long orderId);

    /**
     * 获取用户的团购订单列表
     */
    PageVO<GroupBuyOrder> getUserOrders(Long userId, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 支付团购订单
     */
    boolean payOrder(Long userId, Long orderId);

    /**
     * 检查团购活动状态并更新
     */
    void checkAndUpdateGroupBuyStatus();

    /**
     * 创建团购活动
     *
     * @param groupBuy 团购活动信息
     * @return 创建的团购活动
     */
    GroupBuy create(GroupBuy groupBuy);

    /**
     * 更新团购活动
     *
     * @param groupBuy 团购活动信息
     * @return 更新后的团购活动
     */
    GroupBuy update(GroupBuy groupBuy);

    /**
     * 根据ID查询团购活动
     *
     * @param id 团购活动ID
     * @return 团购活动信息
     */
    GroupBuy findById(Long id);

    /**
     * 查询所有进行中的团购活动
     *
     * @return 进行中的团购活动列表
     */
    List<GroupBuy> findOngoing();

    /**
     * 查询即将开始的团购活动
     *
     * @return 即将开始的团购活动列表
     */
    List<GroupBuy> findUpcoming();

    /**
     * 根据状态查询团购活动
     *
     * @param status 团购状态
     * @return 团购活动列表
     */
    List<GroupBuy> findByStatus(Integer status);

    /**
     * 更新团购活动状态
     *
     * @param id 团购活动ID
     * @param status 新状态
     * @return 是否更新成功
     */
    boolean updateStatus(Long id, Integer status);

    /**
     * 更新参团人数
     *
     * @param id 团购活动ID
     * @param delta 增加的人数（可以为负数）
     * @return 是否更新成功
     */
    boolean updateJoinCount(Long id, Integer delta);

    /**
     * 查询所有团购活动
     *
     * @return 所有团购活动列表
     */
    List<GroupBuy> findAll();
} 